/**
 * runtime-dom 核心：
 * 1. 提供 DOM API
 * 2. 节点操作: 增删改查
 * 3. 属性操作: 样式，类名，事件，其他属性的增删改
 */

import { createRender } from "@vue/runtime-core";
import { extend } from "@vue/shared";
import { nodeOps } from "./nodeOps";
import { patchProp } from "./patchProp";

// 存放渲染时，所需要的方法
const renderOptions = extend({patchProp}, nodeOps);

export function createApp(rootComponent, rootProps = null) {

  const app = createRender(renderOptions)
                .createApp(rootComponent, rootProps);

  const { mount } = app;

  app.mount = function(container) {
    // 1. 清空容器
    container = nodeOps.querySelector(container);
    container.innerHTML = '';
    
    // 2. 将组件渲染成 DOM 元素，挂载到容器中
    mount(container); // 执行挂载

  }
  return app;
}

export {
  renderOptions
}

export * from '@vue/runtime-core';